package com.design.facade;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 外观模式（门面模式）
 * 外观模式（Facade）,他隐藏了系统的复杂性，并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口，这个接口使得子系统更容易被访问或者使用。
 * @author Zee
 * @version 1.0
 * @date 2021/8/31
 */
@Component
public class BaseServiceFacade {

    private Service1 service1;
    private Service2 service2;
    private Service3 service3;
    private Service4 service4;

    @Autowired
    public BaseServiceFacade(Service1 service1, Service2 service2, Service3 service3, Service4 service4) {
        this.service1 = service1;
        this.service2 = service2;
        this.service3 = service3;
        this.service4 = service4;
    }

    /**
     * 外观模式将结构化复杂的代码封装，这样代码可读性高
     */
    public void execute() {
        //第一步比如修改订单状态
        service1.execute();
        //第二步比如写入日志
        service2.execute();
        //第三步比如写入发送订单信息
        service3.execute();
        //第四步比如写入发送短信消息
        service4.execute();
    }
}
